package com.gnerv.battle.boot.module.base.service.impl;

import com.gnerv.battle.boot.module.base.repository.mapper.DictItemMapper;
import com.gnerv.battle.boot.module.base.model.bo.DictItemBO;
import com.gnerv.battle.boot.module.base.model.dto.DictItemDTO;
import com.gnerv.battle.boot.module.base.model.entity.DictItem;
import com.gnerv.battle.boot.module.base.service.CurrentAccountService;
import com.gnerv.battle.boot.module.base.service.DictItemService;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author Gnerv LiGen
 */
@Service
@AllArgsConstructor
public class DictItemServiceImpl implements DictItemService {

    private final DictItemMapper dictItemMapper;
    private final CurrentAccountService currentAccountService;

    @Override
    @Transactional(rollbackFor = {Exception.class})
    public String create(@NonNull DictItemBO dictItemBO) {
        DictItem dictItem = dictItemBO.toCreateDictItem();
        dictItem.setCreator(currentAccountService.accountUkId());
        dictItemMapper.insert(dictItem);
        return dictItem.getUkId();
    }

    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean deleteByUkId(@NonNull String ukId) {
        dictItemMapper.deleteByUkId(ukId);
        return true;
    }

    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean deleteByDictUkId(@NonNull String dictUkId) {
        dictItemMapper.deleteByDictUkId(dictUkId);
        return true;
    }

    @Override
    @Transactional(rollbackFor = {Exception.class})
    public boolean updateByUkId(@NonNull DictItemBO dictItemBO) {
        DictItem dictItem = dictItemBO.toUpdateDictItem();
        dictItemMapper.updateByUkId(dictItem);
        return true;
    }

    @Override
    @Transactional(readOnly = true)
    public DictItemDTO selectByUkId(@NonNull String ukId) {
        return dictItemMapper.selectByUkId(ukId);
    }

    @Override
    @Transactional(readOnly = true)
    public List<DictItemDTO> listByDictUkId(@NonNull String dictUkId) {
        return dictItemMapper.listByDictUkId(dictUkId);
    }

}




